<?php //====================================================================================== // // Function: Convert date and set/get timezone // // Programmer: JKJ // Date : 2022-03-21 // // Copyright Reeft A/S (c) - 2022 //====================================================================================== //====================================================================================== // // Time zones : https://en.wikipedia.org/wiki/List_of_tz_database_time_zones // date_format : https://www.w3schools.com/php/func_date_date_format.asp // //====================================================================================== //====================================================================================== // Timezone is coming from config/config.php //====================================================================================== // // REEFT_local_to_utc : Convert local date to UTC // REEFT_utc_to_local : Convert UTC date to local // REEFT_current_local : Get local data based on current time zone // REEFT_current_utc : Get current UTC date // REEFT_current_timezone_set : Set current time zone - default is Europe/Copenhagen // REEFT_current_timezone_get : Get current time zone // REEFT_format_date : Format a data to another date format - input i ISO timestamp // output is just a date in some format // Valid formats - if an invalid format DFT_DATE_DISPLAY_FORMAT // from config.php is used // *YMD = 2022-12-31 // *DMY = 31-12-2022 // *USA = 12/31/2022 // *ISO = 2022-12-31 // *EUR = 31.12.2022 // *JIS = 2022-12-31 // *LONGJUL = 2022/365 // *PRETTY = 1. Marts 2022 // *PRETTY1 = 1. Mar. 2022 // *PRETTY2 = Mandag, 1. Marts 2022 // //====================================================================================== //@$move_on_up = $move_on_up; //include $move_on_up . "config/config.php"; //====================================================================================== // Check for variables //====================================================================================== $isset = isset($DFT_DATE_DISPLAY_FORMAT); if ( $isset <> true ) { $DFT_DATE_DISPLAY_FORMAT = '*ISO'; } $isset = isset($DFT_CURRENT_TIMEZONE); if ( $isset <> true ) { $DFT_CURRENT_TIMEZONE = 'Europe/Copenhagen'; } //====================================================================================== // Function: Convert from UTC to Local //====================================================================================== function REEFT_utc_to_local( $dateInUTC ) { // Check if date is valid $returnCode = isValidDate($dateInUTC); if ( $returnCode == 1 ) { return ''; // return '0001-01-01 00:00:00'; // return '*ERROR'; } if ( $dateInUTC <> '' ) { REEFT_current_timezone_set(); $time = strtotime($dateInUTC.' UTC'); $dateTimeLocal = date("Y-m-d H:i:s", $time); } else { $dateTimeLocal = ''; } return $dateTimeLocal; } //====================================================================================== // Function: Convert from Local to UTC //====================================================================================== function REEFT_local_to_utc( $dateInLocal ) { // Check if date is valid $returnCode = isValidDate($dateInLocal); if ( $returnCode == 1 ) { return ''; //return '*ERROR'; } if ( $dateInLocal <> '' ) { REEFT_current_timezone_set(); $dateTime = $dateInLocal; $newDateTime = new DateTime($dateTime); $newDateTime->setTimezone(new DateTimeZone("UTC")); $dateTimeUTC = $newDateTime->format("Y-m-d H:i:s"); } else { $dateTimeUTC = ''; } return $dateTimeUTC; } //====================================================================================== // Function: Get current date in UTC //====================================================================================== function REEFT_current_utc() { REEFT_current_timezone_set(); $dateTime = date("Y-m-d H:i:s"); $newDateTime = new DateTime($dateTime); $newDateTime->setTimezone(new DateTimeZone("UTC")); $dateInUTC = $newDateTime->format("Y-m-d H:i:s"); return $dateInUTC; } //====================================================================================== // Function: Get current date in local //====================================================================================== function REEFT_current_local() { REEFT_current_timezone_set(); $dateTime = date("Y-m-d H:i:s"); $newDateTime = new DateTime($dateTime); //$newDateTime->setTimezone(new DateTimeZone($currentTimeZone)); $dateInLocal = $newDateTime->format("Y-m-d H:i:s"); return $dateInLocal; } //====================================================================================== // Function: Get current time zone //====================================================================================== function REEFT_current_timezone_get() { $currentTimeZone = date_default_timezone_get(); return $currentTimeZone; } //====================================================================================== // Function: Set current time zone // Default: Europe/Copenhagen //====================================================================================== function REEFT_current_timezone_set( $timeZone='' ) { global $DFT_CURRENT_TIMEZONE; // No timezone passed to function, use DK if ( $timeZone == '' ) { // $timeZone = 'Europe/London'; //$timeZone = 'Africa/Mogadishu'; $timeZone = $DFT_CURRENT_TIMEZONE; } date_default_timezone_set( $timeZone ); return $timeZone; } //====================================================================================== // Function: Convert to config data format //====================================================================================== // *YMD = 2022-12-31 // *DMY = 31-12-2022 // *USA = 12/31/2022 // *ISO = 2022-12-31 // *EUR = 31.12.2022 // *JIS = 2022-12-31 // *LONGJUL = 2022/365 // *PRETTY = 1. Marts 2022 // *PRETTY1 = 1. Mar. 2022 // *PRETTY2 = Mandag, 1. Marts 2022 //====================================================================================== function REEFT_format_date( $some_date, $output_date_format = '*ISO' ) { // Check if date is valid $returnCode = isValidDate($some_date); if ( $returnCode == 1 ) { return ''; //return '*ERROR'; } //====================================================================================== // Set globals //====================================================================================== global $DFT_LANGUAGE ; global $DFT_DATE_DISPLAY_FORMAT; global $datahub_month; global $datahub_month_short; global $datahub_day_name; global $datahub_day_name_ISO; $date_format_check = 'N'; if ( $output_date_format == '*YMD' or $output_date_format == '*DMY' or $output_date_format == '*USA' or $output_date_format == '*ISO' or $output_date_format == '*EUR' or $output_date_format == '*JIS' or $output_date_format == '*PRETTY' or $output_date_format == '*PRETTY1' or $output_date_format == '*PRETTY2' or $output_date_format == '*LONGJUL' ) { $date_format_check = 'Y'; } if ( $date_format_check == 'N' ) { $output_date_format = $DFT_DATE_DISPLAY_FORMAT; } // Create date object $some_date_object = date_create($some_date); // Convert date if ( $output_date_format == '*ISO' ) { $some_date = date_format($some_date_object,'Y-m-d H:i:s'); } if ( $output_date_format == '*YMD' ) { $some_date = date_format($some_date_object,'Y-m-d H:i:s'); } if ( $output_date_format == '*DMY' ) { $some_date = date_format($some_date_object,'d-m-Y H:i:s'); } if ( $output_date_format == '*USA' ) { $some_date = date_format($some_date_object,'m/d/Y h:i:s A'); } if ( $output_date_format == '*EUR' ) { $some_date = date_format($some_date_object,'d.m.Y H:i:s'); } if ( $output_date_format == '*JIS' ) { $some_date = date_format($some_date_object,'Y-m-d H:i:s'); } if ( $output_date_format == '*LONGJUL' ) { $wrk_day = date_format($some_date_object,'z') + 1; $wrk_year = date_format($some_date_object,'Y'); $some_date = $wrk_year . '/' . $wrk_day . ' ' . date_format($some_date_object,'H:i:s'); } if ( $output_date_format == '*PRETTY' ) { $wrk_month = date_format($some_date_object,'n'); $month_locale = $datahub_month[$wrk_month]; $some_date = date_format($some_date_object,'j') . '. ' . $month_locale . ' ' . date_format($some_date_object,'Y') . ' ' . date_format($some_date_object,'H:i:s'); } if ( $output_date_format == '*PRETTY1' ) { $wrk_month = date_format($some_date_object,'n'); $month_locale = $datahub_month_short[$wrk_month]; $some_date = date_format($some_date_object,'j') . '. ' . $month_locale . '. ' . date_format($some_date_object,'Y') . ' ' . date_format($some_date_object,'H:i:s'); } if ( $output_date_format == '*PRETTY2' ) { $wrk_month = date_format($some_date_object,'n'); $month_locale = $datahub_month[$wrk_month]; $wrk_day = date_format($some_date_object,'N'); //$wrk_day = date_format($some_date_object,'w'); $day_locale = $datahub_day_name_ISO[$wrk_day]; $some_date = $day_locale . ', ' . date_format($some_date_object,'j') . '. ' . $month_locale . ' ' . date_format($some_date_object,'Y') . ' ' . date_format($some_date_object,'H:i:s'); } return $some_date; } //====================================================================================== // Function: Calculate new date //====================================================================================== function REEFT_calc_date( $input_date, $repeat_value = '*DAY', $repeat_number = 1 ) { global $DFT_EVENT_ADJUST_WEEKEND_ON_REPEAT; $output_date = ''; // Check repeat_value $i_am_ok = 'N'; if ( $repeat_value == '*MINUTE' or $repeat_value == '*HOUR' or $repeat_value == '*DAY' or $repeat_value == '*WEEK' or $repeat_value == '*MONTH' or $repeat_value == '*YEAR' ) { $i_am_ok = 'Y'; } // If not valid, set default to *DAY if ( $i_am_ok == 'N' ) { $repeat_value = '*DAY'; } // Check repeat_number, cannot be zero - default is 1 if ( $repeat_number < 1 ) { $repeat_number = 1; } // Add if ( $repeat_value == '*MINUTE' ) { $output_date = date('Y-m-d H:i:s', strtotime($input_date . ' +' . $repeat_number . 'minute')); } if ( $repeat_value == '*HOUR' ) { $output_date = date('Y-m-d H:i:s', strtotime($input_date . ' +' . $repeat_number . 'hour')); } if ( $repeat_value == '*DAY' ) { $output_date = date('Y-m-d H:i:s', strtotime($input_date . ' +' . $repeat_number . 'day')); } if ( $repeat_value == '*WEEK' ) { $output_date = date('Y-m-d H:i:s', strtotime($input_date . ' +' . $repeat_number . 'week')); } if ( $repeat_value == '*MONTH' ) { $output_date = date('Y-m-d H:i:s', strtotime($input_date . ' +' . $repeat_number . 'month')); } if ( $repeat_value == '*YEAR' ) { $output_date = date('Y-m-d H:i:s', strtotime($input_date . ' +' . $repeat_number . 'year')); } // $tmpRow["input_date"] = $input_date; // $tmpRow["output_date"] = $output_date; if ( $output_date == '' ) { $output_date = $input_date; } // Check of Saturday/sunday if ( $DFT_EVENT_ADJUST_WEEKEND_ON_REPEAT == 'Y' ) { $day_number_ISO = REEFT_get_day_number_ISO( $output_date ); // Saturday if ( $day_number_ISO == 6 ) { $output_date = REEFT_calc_date( $output_date, '*DAY', 2 ); } // Sunday if ( $day_number_ISO == 7 ) { $output_date = REEFT_calc_date( $output_date, '*DAY', 1 ); } } return $output_date; } //====================================================================================== // Function: Get day number //====================================================================================== function REEFT_get_day_number( $some_date ) { // Check if date is valid $returnCode = isValidDate($some_date); if ( $returnCode == 1 ) { return ''; //return '*ERROR'; } // Create date object $some_date_object = date_create($some_date); //$wrk_day = date_format($some_date_object,'N'); $gay_number = date_format($some_date_object,'w'); return $gay_number; } //====================================================================================== // Function: Get day number ISO //====================================================================================== function REEFT_get_day_number_ISO( $some_date ) { // Check if date is valid $returnCode = isValidDate($some_date); if ( $returnCode == 1 ) { return ''; //return '*ERROR'; } // Create date object $some_date_object = date_create($some_date); $gay_number = date_format($some_date_object,'N'); return $gay_number; } //====================================================================================== // Check if valid date - might not be 100% waterproof, but it will do... //====================================================================================== function isValidDate($date, $format = 'Y-m-d H:i:s' ) { $returnCode = 0; try { $dateTimeObject = new DateTime($date); } catch (Exception $exc) { $returnCode = 1; } return $returnCode; } //====================================================================================== // Check if valid date - might not be 100% waterproof, but it will do... //====================================================================================== function isValidDateNew($date, $format = 'Y-m-d H:i:s' ) { $returnCode = 0; try { $dateTimeObject = new DateTime($date); } catch (Exception $exc) { $returnCode = 1; return $returnCode; } if ( $returnCode == 0 ) { $myDate = explode(' ', $date); $tempDate = explode('-', $myDate[0]); $elm = count($tempDate); if ( $elm <> 3 ) { $returnCode = 1; return $returnCode; } // checkdate(month, day, year) if ( !checkdate($tempDate[1], $tempDate[2], $tempDate[0]) ) { $returnCode = 1; } $tempTime = explode(':', $myDate[1]); $elm = count($tempTime); if ( $elm <> 3 ) { $returnCode = 1; return $returnCode; } if ( $tempTime[0] > 23 ) { $returnCode = 1; return $returnCode; } if ( $tempTime[1] > 59 ) { $returnCode = 1; return $returnCode; } if ( $tempTime[2] > 59 ) { $returnCode = 1; return $returnCode; } } return $returnCode; } ?>